/**
 * dart 中的运算符
 *  
 *  算术运算符：+、 -、 *、 /、 ~/ 向下取整、 % 模运算，取余数
 *  自增自减：++ --
 *  关系运算符：==、 !=、 >、 <、 >=、 <= 
 *     测试两个变量中是否引用同一个对象，不能使用 == ，需要使用 identical(obj1, obj2)
 *  类型判断运算：
 *      as  将一个对象转换为指定类型，只能 子类型 as 父类型
 *      is  判断一个对象是不是某种类型的实例(子对象)
 *      is! 判断某种对象是否不是某种类型的实例(子对象)
 *      
 *      print([] is List); // true
 *      print([] is! List); // true
 *      print([] is Set); // false
 *  复合赋值运算符：+=、 -=、 *=、 /=、 ~/=、 %=、 =
 *      例 a += b;  ===> 等价于： a = a + b;
 *      ??= 如果变量的值为null才赋值，否则不赋值
 *        a ??= value; 如果 b 为null时，将value的值赋值给b；否则b使用原来的值
 *  逻辑运算符：! 取反、|| 逻辑或、 && 逻辑与
 *  条件表达式: 
 *    条件 ? 表达式1 : 表达式2  ===> 一个条件，二选一执行
 *    值1 ?? 值2  ===> 两个值，第一个不是null就用第一个值，第一个是null，就用第二个值
 * 
 *  级联运算符：
 * 
 *    dart 中独特的运算符
 *    今后只要是对同一个对象进行一系列的操作时，都可用级联运算符
 *    除了调用函数，还可以访问同一对象上的属性
 *    这通常可以节省创建临时变量的步骤，同时编写出更流畅的代码
 *    使用:
 * 
 *      对象
 *        ..操作1
 *        ..操作2
 *        ..其他操作
 * 
 *    例：
 * 
 *      var sb = StringBuffer();
 *      sb.write("Hello ");
 *      sb.writeAll(['Welcome', 'to', 'learn'], " ");
 *      sb.write("dart.");
 * 
 *      使用级联运算符:
 * 
 *        var sb = StringBuffer();
 *        sb
 *          ..write("Hello ")
 *          ..writeAll(['Welcome', 'to', 'learn'], " ")
 *          ..write("dart.");
 * 
 *      级联运算符使用注意事项：不要在有返回值的，或不修改原对象返回新对象的方法上应用级联运算符。
 *                          只在直接修改原对象的方法上使用。
 */

void main() {

}
